/* =============================================================================
PROJET           : c-social-network
NOM DU FICHIER   : personne.c
OBJET            : Corps du module Personne
--------------------------------------------------------------------------------
DATE DE CREATION : 27/04/10
AUTEUR           : Kevin MATTIACI
--------------------------------------------------------------------------------
MODIFICATIONS (   n) date - auteur - description )
    1) 27/04/10 - Kevin MATTIACI - élaboration des algorithmes de base
    2) 27/04/10 - Benjamin MICHEL - retouches pour la compilation
    3) 28/04/10 - Benjamin MICHEL - Ajout de la fonction is_identique
    4) 28/04/10 - Benjamin MICHEL - Ajout de la fonction destroy
============================================================================= */

/*Usage de NULL*/
#include <stddef.h>

/*Usage de Malloc*/
#include <stdlib.h>

/*Usage de assert*/
#include <assert.h>

/*Importation du header*/
#include "personne.h"


t_personne* creer_vide(void){
    /* Renvoie le pointeur sur NULL de type t_personne */
    return (t_personne *) NULL;
}



t_personne* creer(int id, char nom[], int freq){
	int i;/* iteration */
	t_personne* pers; /* Nouvelle personne créée */

	/*Alloue l'espace pour une structure*/
	pers = ( t_personne * ) malloc( sizeof(t_personne) );
	pers->id = id;/*Copie id*/
	pers->frequence = freq;/*Copie la fréquence*/

	/*Copie du nom*/
	for(i = 0; i < MAX_NOM_PERSONNE ; i++)
	    pers->nom[i]=nom[i];

    /*renvoie un pointeur sur la structure créée*/
    return pers;
}



int is_vide(const t_personne *pers){
    /* Vérifie si le pointeur est NULL */
	return (pers == NULL);
}



int get_id(const t_personne *pers){
	return pers->id;
}



void get_nom(const t_personne* pers, char ** ch){
    int i;/*iteration*/

    /* On vérifie que ch est un pointeur sur un pointeur sur null */
    assert(*ch == NULL);

    /*On alloue l'espace pour un tableau de MAX_NOM_PERSONNE de char*/
    *ch = (char *) malloc( sizeof(char) * MAX_NOM_PERSONNE );

	/* On copie le tableau de la structure dans ce tableau */
	for (i = 0; i < MAX_NOM_PERSONNE ; i++)
	    ( *ch )[i] = pers->nom[i];
}



int get_frequence(const t_personne *pers){
	return pers->frequence;
}


int is_identique(const t_personne *pers1, const t_personne *pers2){
    /*Vérifie si ils pointent tout les deux sur le même pointeur*/
    return (pers1 == pers2);
}


void destroy(t_personne **pers){
    /*Libère la mémoire*/
    free(*pers);
    /*Met le pointeur à  NULL*/
    *pers=NULL;
}

